Добро пожаловать на форумы Боевого Народа (бывший форум Live.CNews.ru)!

ВАЖНЫЕ ТЕМЫ: FAQ по переезду и восстановлению учеток | Ошибки и глюки форума.
О проблемах с учетными записями писать СЮДА.
AAS - Форумы Боевого Народа
IPB

Здравствуйте, гость ( Вход | Регистрация )

5 страниц V   1 2 3 > »   
Ответить в данную темуНачать новую тему
AAS, с не родными картами...
сообщение 3.1.2007, 12:04
Сообщение #1





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



сабж, пробывал дабавить в этот мод другие карты, ни чего не получилось. раунд не стартовал... кто нить пробывал это осуществить ?
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 3.1.2007, 15:06
Сообщение #2





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Может стоит начать с описания мода желательно с линками ;)

знаю много модов но про этот не слышал хотя как показывает практита - у одного омда порой несколько названий..
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 3.1.2007, 15:55
Сообщение #3





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



mods\bf2\python\game\gamemodes\gpm_cq.py

landot AAS mod for BF2 conquest mode

меняется файл на "не родной", и на сервере точки начинают захватываться в строго определенной последовательности, на моем сервере народ тащится по некоторым не офф картам, а мод есстественно на них не работает, вот я его уже и так и так, а всеравно не работает. :(

ну в торопях нашел страничку с этим модом, не сочтите за рекламу...
http://landot.org:8080/landot/aas/

Сообщение отредактировал ROOL - 3.1.2007, 15:58
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 5.1.2007, 9:07
Сообщение #4





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Странно, у меня и с родными картами не стартует, если баланс поставить false стартует, но флаги вообще не захватываются, пробовал на версии 1 и 1.4, 1.12 как там рекомендуют патча нету. может кто посоветует в чем причина?
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 8.7.2007, 9:21
Сообщение #5





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Комрады, никто не нашел способ впихнуть в этот мод новые карты?Он прекрасно работает на 1.41 у нас в локале,но хотелось бы добавить несколько новых карт,Джал например rolleyes.gif
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 13.7.2007, 21:43
Сообщение #6





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



где можно взять этот мод ?
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 17.7.2007, 9:49
Сообщение #7





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Цитата(Unicornio @ Пятница, 13 Июля 2007, 21:43:54) *
где можно взять этот мод ?

Создать текстовый файл,вставить всю ету хрень, переименовать файл в gpm_cq.py и заменить им родной gpm_cq.py в папке C:\Program Files\EA GAMES\Battlefield 2\mods\bf2\python\game\gamemodes,желательно оставить копию родного,а то вдруг не понравиться rolleyes.gif

#
# landot AAS mod for BF2 conquest mode
#
# Version 1.7
#
# The following copyright only applies to pieces of code added or changed
# in this file compared to the original gpm_cq.py included with BF2 1.02.
# Any other code is copyright of the copyright owner of that particular code.
#
# Copyright © 2005, Jarkko Santala <santala@landot.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# Contributors:
#
# Letranger, Men Dake, Nordstern, Dark Angel
#
# Thanks to everyone for great help in testing, flag order and new ideas!
#
# Please check SETTINGS below.
#

TAKEOVERTYPE_CAPTURE = 1
TAKEOVERTYPE_NEUTRALIZE = 2

SCORE_CAPTURE = 2
SCORE_NEUTRALIZE = 2
SCORE_CAPTUREASSIST = 1
SCORE_NEUTRALIZEASSIST = 1
SCORE_DEFEND = 1

Top = 0
Middle = 1
Bottom = 2

import host
import bf2
import math
from game.scoringCommon import addScore, RPL
from bf2 import g_debug

g_controlPoints = [] # cache, as this map won't change

global aasTip
global aasLast
global aasNextCp
global aasRadius
global aasVehicleCap
global aasCpBalance
global aasDebug
global aasL10n
global aasL10nCp
global aasL10nText

###############################################################################
#
# landot AAS mod - SETTINGS
#
#
# The CP area sizes will be calculated using the following formula:
#
# Original CP Radius * ( Max Number Of Players / aasRadius )
#
# If you set the aasRadius to 0 the CP area sizes will stay normal.
# With default setting 10: 10 players = the same, 30 players = 3 times bigger
#
aasRadius = 10
#
# Choose localization by setting the variable aasL10n
#
# 0 = English
# 1 = French
# 2 = German
#
aasL10n = 0
#
# Enable/disable Commander
#
# 1 = Enable
# 0 = Disable
#
aasCommander = 0
#
# Using the following setting you can choose whether CPs per team will
# be balanced at the start of each map. Enabling this setting means that
# the battle will always start in the middle of the map.
#
# True = Balance number of CPs per team at map start
# False = Don't balance, use default CP ownerships
#
aasCpBalance = True
#
# No user serviceable parts below this point!
#
###############################################################################

aasDebug = 0
aasLast = [ 0, 0, 0 ]
aasNextCp = [ 0, 0, 0 ]

aasTip = " * AAS * "

aasL10nCp = { "abandonedhuts" : [ "Abandoned Huts" , "Baraquements dйsaffectйs", "Verlassene Hьtten" ] ,
"abandonedvillage" : [ "Abandoned Village" , "Village abandonnй", "Verlassenes Dorf" ] ,
"airfield" : [ "Airfield" , "Aйrodrome", "Flugplatz" ] ,
"airfieldbase" : [ "Airfield Base" , "Base de l aйrodrome", "Basis am Flugplatz" ] ,
"airfieldcamp" : [ "Airfield Camp" , "Camp de l aйrodrome", "Lager am Flugplatz" ] ,
"alley" : [ "Alley" , "Rue", "Gasse" ] ,
"alleyway" : [ "Alleyway" , "Ruelle", "Durchgang" ] ,
"ammodepot" : [ "Ammo Depot" , "Dйpфt de munitions", "Munitionslager" ] ,
"backyard" : [ "Backyard" , "Arriиre-cour", "Hinterhof" ] ,
"beach" : [ "Beach" , "Plage", "Strand" ] ,
"beachhouse" : [ "Beach House" , "Maison cфtiиre", "Strandhaus" ] ,
"bridge" : [ "Bridge" , "Pont", "Brьcke" ] ,
"bridgebase" : [ "Bridge Base" , "Base du pont", "Brьckenbasis" ] ,
"bridgecamp" : [ "Bridge Camp" , "Camp du pont", "Brьckenlager" ] ,
"canyonguardpost" : [ "Canyon Guard Post" , "Poste de garde du dйfilй", "Wachposten an der Schlucht" ] ,
"cementfactory" : [ "Cement Factory" , "Cimenterie", "Zementfabrik" ] ,
"centralfront" : [ "Central Front" , "Front central", "Zentrale Front" ] ,
"centralisland" : [ "Central Island" , "Ile centrale", "Zentrale Insel" ] ,
"chineseairfield" : [ "Chinese Airfield" , "Aйrodrome chinois", "Flugplatz (China)" ] ,
"chinesebase" : [ "Chinese Base" , "Base chinoise", "Basis (China)" ] ,
"chinesehq" : [ "Chinese HQ" , "PC chinois", "HQ (China)" ] ,
"city" : [ "City" , "Ville", "Stadt" ] ,
"city_entrance" : [ "City Entrance" , "Entrйe de la ville", "Stadt-Eingang" ] ,
"citypark" : [ "City Park" , "Parc", "Stadtpark" ] ,
"clubhouse" : [ "Club House" , "Pavillon", "Klubhaus" ] ,
"communicationcentral" : [ "Communication Central" , "Central de communication", "Kommunikationszentrale" ] ,
"constructionsite" : [ "Construction Site" , "Chantier", "Baustelle" ] ,
"containerstorage" : [ "Container Storage" , "Zone de stockage", "Lagerhaus" ] ,
"controlcenter" : [ "Control Center" , "Centre de contrфle", "Kontrollzentrum" ] ,
"convoy" : [ "Convoy" , "Convoi", "Konvoi" ] ,
"docks" : [ "Docks" , "Quais", "Docks" ] ,
"eastoilfield" : [ "East Oilfield" , "Champ pйtrolifиre Est", "Цstliches Цlfeld" ] ,
"emineentrance" : [ "East Mine Entrance" , "Entrйe Est de la mine", "Eingang zur цstlichen Mine" ] ,
"factory" : [ "Factory" , "Usine", "Fabrik" ] ,
"farm" : [ "Farm" , "Ferme", "Bauernhof" ] ,
"fishfactory" : [ "Fish Factory" , "Conserverie de poisson", "Fischfabrik" ] ,
"fortification" : [ "Fortification" , "Fortification", "Befestigungsanlage" ] ,
"gasstation" : [ "Gas Station" , "Station-service", "Tankstelle" ] ,
"gatehouse" : [ "Gatehouse" , "Maison de gardien", "Pfцrtnerhaus" ] ,
"harbor" : [ "Harbor" , "Port", "Hafen" ] ,
"hill" : [ "Hill" , "Colline", "Hьgel" ] ,
"hillvillage" : [ "Hill Village" , "Village sur la colline", "Bergdorf" ] ,
"hotel" : [ "Hotel" , "Hфtel", "Hotel" ] ,
"industrialarea" : [ "Industrial Area" , "Zone industrielle", "Industriegebiet" ] ,
"intake" : [ "Intake" , "Cheminйe", "Einlaufturm" ] ,
"island" : [ "Island" , "Ile", "Insel" ] ,
"islandfarmhouse" : [ "Island Farmhouse" , "Ferme insulaire", "Insel-Bauernhaus" ] ,
"lowerdam" : [ "Lower Dam" , "Pied du barrage", "Unterer Damm" ] ,
"mainentrance" : [ "Main Entrance" , "Entrйe principale", "Haupteingang" ] ,
"maintenancebuilding" : [ "Maintenance Buildings" , "Locaux d entretien", "Wartungsgebдude" ] ,
"market" : [ "Market Place" , "Marchй", "Marktplatz" ] ,
"marketplace" : [ "Market Place" , "Place du marchй", "Marktplatz" ] ,
"materialstation" : [ "Material Station" , "Dйpфt de matйriel", "Materialstation" ] ,
"mecairfield" : [ "MEC Airfield" , "Aйrodrome CMO", "Flugplatz (MEC)" ] ,
"mecbase" : [ "MEC Base" , "Base CMO", "Basis (MEC)" ] ,
"mosque" : [ "Mosque", "Mosquйe", "Mosque" ] ,
"mountainlookout" : [ "Mountain Lookout" , "Poste de guet", "Beobachtungsposten auf dem Berg" ] ,
"naturalgasstation" : [ "Natural Gas Station" , "Exploitation de gaz naturel", "Erdgas-Werk" ] ,
"ngasstation" : [ "North Gas Station" , "Station-service Nord", "Nцrdliche Tankstelle" ] ,
"northbeach" : [ "North Beach" , "Plage Nord", "Nцrdlicher Strand" ] ,
"northdocks" : [ "North Docks" , "Quais Nord", "Nцrdliche Docks" ] ,
"northfront" : [ "North Front" , "Front Nord", "Nцrdliche Front" ] ,
"northisland" : [ "North Island" , "Ile septentrionale", "Nцrdliche Insel" ] ,
"northperimeter" : [ "North Perimeter" , "Nord du pйrimиtre", "Randstellung Nord" ] ,
"officebuildings" : [ "Office Buildings" , "Bureaux", "Bьrogebдude" ] ,
"oilcisterns" : [ "Oil Cisterns" , "Citernes d essence", "Цl-Zisternen" ] ,
"oilfieldcheckpoint" : [ "Oilfield Checkpoint" , "Point de contrфle champ pйtrol.", "Checkpoint Цlfeld" ] ,
"oldcity" : [ "Old City" , "Vieille ville", "Alte Stadt" ] ,
"olivefort" : [ "Olive Hill Fortification" , "Fortif. colline des oliviers", "Olivenberg-Befestigung" ] ,
"outpost" : [ "Outpost" , "Avant-poste", "Vorposten" ] ,
"outskirts" : [ "Outskirts" , "Faubourgs", "AuЯenbezirke" ] ,
"powerplant" : [ "Power Plant" , "Centrale йlectrique", "Elektrizitдtswerk" ] ,
"powerstation" : [ "Power Station" , "Centrale йlectrique", "Kraftwerk" ] ,
"reactors" : [ "Reactor Towers" , "Cheminйes", "Reaktoren" ] ,
"refinery" : [ "Refinery" , "Raffinerie", "Raffinerie" ] ,
"refineryentrance" : [ "Refinery Entrance" , "Entrйe de la raffinerie", "Eingang zur Raffinerie" ] ,
"refuellingstation" : [ "Refueling Station" , "Poste de ravitaillement", "Tankstation" ] ,
"riverfort" : [ "River Fortification" , "Fortification fluviale", "Fluss-Befestigung" ] ,
"rivervillage" : [ "River Village" , "Village en bord de riviиre", "Dorf am Fluss" ] ,
"roadblock" : [ "Road Block" , "Barrage routier", "StraЯensperre" ] ,
"roadconstruct" : [ "Road Construction" , "Route en travaux", "StraЯenbaustelle" ] ,
"rockfort" : [ "Rock Fortification" , "Fortification du rocher", "Fels-Befestigung" ] ,
"securityhq" : [ "Security Headquarters" , "QG de la sйcuritй", "Sicherheits-Hauptquartier" ] ,
"sgasstation" : [ "South Gas Station" , "Station-service Sud", "Sьdliche Tankstelle" ] ,
"smallairstrip" : [ "Small Airstrip" , "Petite piste d aviation", "Kleines Flugfeld" ] ,
"southbeach" : [ "South Beach" , "Plage Sud", "Sьdlicher Strand" ] ,
"southblock" : [ "South Block" , "Pвtй de maisons Sud", "Sьdlicher Block" ] ,
"southdocks" : [ "South Docks" , "Quais Sud", "Sьdliche Docks" ] ,
"southfront" : [ "South Front" , "Front Sud", "Sьdliche Front" ] ,
"southisland" : [ "South Island" , "Ile mйridionale", "Sьdliche Insel" ] ,
"southperimeter" : [ "South Perimeter" , "Sud du pйrimиtre", "Randstellung Sьd" ] ,
"square" : [ "Square" , "Place", "Platz" ] ,
"suburb" : [ "Suburb" , "Banlieue", "Vorort" ] ,
"supervisorbase" : [ "Supervisor Base" , "Base de surveillance", "Basis (Aufseher)" ] ,
"surveillancepost" : [ "Surveillance Post" , "Poste de surveillance", "Kontrollposten" ] ,
"temple" : [ "Temple" , "Temple", "Tempel" ] ,
"trainaccident" : [ "Train Accident" , "Accident ferroviaire", "Zugunglьck" ] ,
"tvstation" : [ "TV Station" , "Station TV", "Fernsehsender" ] ,
"uppercamp" : [ "Upper Camp" , "Camp supйrieur", "Oberes Lager" ] ,
"upperdam" : [ "Upper Dam" , "Sommet du barrage", "Oberer Damm" ] ,
"usairfield" : [ "US Airfield" , "Aйrodrome amйricain", "Flugplatz (US)" ] ,
"uscarrier" : [ "US Carrier" , "Porte-avions amйricain", "Flugzeugtrдger (US)" ] ,
"ustown" : [ "US Town" , "Ville amйricaine", "Stadt (US)" ] ,
"village" : [ "Village" , "Village", "Verlassenes Dorf" ] ,
"villagefort" : [ "Village Fortification" , "Fortification du village", "Dorf-Befestigung" ] ,
"vistapoint" : [ "Vista Point" , "Point de vue", "Aussichtspunkt" ] ,
"warehouse" : [ "Warehouse" , "Entrepфt", "Lagerhaus" ] ,
"waterfall" : [ "Dam" , "Barrage", "Damm" ] ,
"westoilfield" : [ "West Oilfield" , "Champ pйtrolifиre Ouest", "Westliches Цlfeld" ] ,
"westperimeter" : [ "West Perimeter" , "Ouest du pйrimиtre", "Randstellung West" ] ,
"wmineentrance" : [ "West Mine Entrance" , "Entrйe Ouest de la mine", "Eingang zur westlichen Mine" ] ,
"woodyard" : [ "Wood Yard" , "Parc а bois", "Holzlagerplatz" ] }

aasL10nTexts = [ [ "Flags must be captured in correct order!", "You have entered the ", " must be captured before the ", "Proceed to the " ] ,
[ "Capturez les points dans le bon ordre!", "Vous кtes au point : ", " : doit кtre capturй avant : ", "Capturez : " ] ,
[ "Die Flaggen mьssen in einer bestimmten Reihenfolge erobert werden!", "Gerade erobert: ", " muss zuerst erobert werden vor ", "Nдchster Eroberungspunkt: " ] ]

aasL10nText = aasL10nTexts[aasL10n]

def aasSetNextCp(aasTeam, aasInit):

aasMaps = { "16" :
{ "dalian_plant" :
[ "cpname_dp_16_powerplant", "cpname_dp_16_mainentrance", "cpname_dp_16_constructionsite", "cpname_dp_16_reactors" ] ,
"daqing_oilfields" :
[ "cpname_do_16_oldcity", "cpname_do_16_oilcisterns", "cpname_do_16_refinery" ] ,
"dragon_valley" :
[ "cpname_dv_16_refinery", "cpname_dv_16_powerstation", "cpname_dv_16_hillvillage" , "cpname_dv_16_woodyard" ] ,
"fushe_pass" :
[ "cpname_gp_16_wmineentrance", "cpname_gp_16_island", "cpname_gp_16_emineentrance" ] ,
"gulf_of_oman" :
[ "cpname_go_16_constructionsite", "cpname_go_16_city", "cpname_go_16_village", "cpname_go_16_beach" ] ,
"kubra_dam" :
[ "cpname_kd_16_powerstation", "cpname_kd_16_lowerdam", "cpname_kd_16_upperdam", "cpname_kd_16_constructionsite" ] ,
"mashtuur_city" :
[ "cpname_mc_16_hotel", "cpname_mc_16_northbridge", "cpname_mc_16_roadconstruct", "cpname_mc_16_southblock" ] ,
"operation_clean_sweep":
[ "cpname_oc_16_smallairstrip", "cpname_oc_16_refuellingstation", "cpname_oc_16_controlcenter", "cpname_oc_16_airfield" ] ,
"sharqi_peninsula" :
[ "cpname_sp_16_hotel", "cpname_sp_16_constructionsite", "cpname_sp_16_officebuildings", "cpname_sp_16_tvstation" ] ,
"songhua_stalemate" :
[ "cpname_ss_16_centralfront", "cpname_ss_16_northisland", "cpname_ss_16_temple", "cpname_ss_16_westperimeter" ] ,
"strike_at_karkand" :
[ "cpname_sk_16_market", "cpname_sk_16_square", "cpname_sk_16_hotel", "cpname_sk_16_gasstation" ] ,
"zatar_wetlands" :
[ "cpname_zw_16_naturalgasstation", "cpname_zw_16_centralisland", "cpname_zw_16_factory" ] } ,
"32" :
{ "dalian_plant" :
[ "cpname_dp_32_airfield", "cpname_dp_32_mainentrance", "cpname_dp_32_maintenancebuilding", "cpname_dp_32_southdocks", "cpname_dp_32_reactors", "cpname_dp_32_uscarrier" ] ,
"daqing_oilfields" :
[ "cpname_do_32_chinesebase", "cpname_do_32_oldcity", "cpname_do_32_powerstation", "cpname_do_32_oilcisterns", "cpname_do_32_gasstation", "cpname_do_32_refinery", "cpname_do_32_ustown"] ,
"dragon_valley" :
[ "cpname_dv_32_refinery", "cpname_dv_32_powerstation", "cpname_dv_32_hillvillage", "cpname_dv_32_woodyard", "cpname_dv_32_islandfarmhouse", "cpname_dv_32_marketplace"] ,
"fushe_pass" :
[ "cpname_gp_32_uppercamp", "cpname_gp_32_bridgecamp", "cpname_gp_32_wmineentrance", "cpname_gp_32_emineentrance", "cpname_gp_32_securityhq", "cpname_gp_32_powerplant" ] ,
"gulf_of_oman" :
[ "cpname_go_32_airfieldbase", "cpname_go_32_constructionsite", "cpname_go_32_hotel", "cpname_go_32_rockfort", "cpname_go_32_olivefort", "cpname_go_32_riverfort", "cpname_go_32_uscarrier" ] ,
"kubra_dam" :
[ "cpname_kd_32_intake", "cpname_kd_32_constructionsite", "cpname_kd_32_powerstation", "cpname_kd_32_lowerdam", "cpname_kd_32_materialstation", "cpname_kd_32_refuellingstation", "cpname_kd_32_bridgebase", "cpname_kd_32_abandonedhuts" ] ,
"mashtuur_city" :
[ "cpname_mc_32_hotel", "cpname_mc_32_powerplant", "cpname_mc_32_mosque", "cpname_mc_32_backyard", "cpname_mc_32_hill" ] ,
"operation_clean_sweep" :
[ "cpname_oc_32_communicationcentral", "cpname_oc_32_abandonedvillage", "cpname_oc_32_smallairstrip", "cpname_oc_32_refuellingstation", "cpname_oc_32_controlcenter", "cpname_oc_32_airfield" ] ,
"sharqi_peninsula" :
[ "cpname_sp_32_beachhouse", "cpname_sp_32_clubhouse", "cpname_sp_32_outskirts", "cpname_sp_32_city_entrance", "cpname_sp_32_surveillancepost", "cpname_sp_32_hotel", "cpname_sp_32_constructionsite", "cpname_sp_32_tvstation" ] ,
"songhua_stalemate" :
[ "cpname_ss_32_chinesehq", "cpname_ss_32_centralfront", "cpname_ss_32_northisland", "cpname_ss_32_southisland", "cpname_ss_32_westperimeter", "cpname_ss_32_fishfactory" ] ,
"strike_at_karkand" :
[ "cpname_sk_32_gatehouse", "cpname_sk_32_trainaccident", "cpname_sk_32_market", "cpname_sk_32_suburb", "cpname_sk_32_square", "cpname_sk_32_hotel", "cpname_sk_32_gasstation" ] ,
"zatar_wetlands" :
[ "cpname_zw_32_mecbase", "cpname_zw_32_farm", "cpname_zw_32_naturalgasstation", "cpname_zw_32_centralisland", "cpname_zw_32_factory", "cpname_zw_32_village", "cpname_zw_32_airfield" ] } ,
"64" :
{ "dalian_plant" :
[ "cpname_dp_64_airfield", "cpname_dp_64_mainentrance", "cpname_dp_64_maintenancebuilding", "cpname_dp_64_southdocks", "cpname_dp_64_reactors", "cpname_dp_64_warehouse", "cpname_dp_64_northdocks", "cpname_dp_64_uscarrier" ] ,
"daqing_oilfields" :
[ "cpname_do_64_chinesebase", "cpname_do_64_powerstation", "cpname_do_64_westoilfield", "cpname_do_64_refinery", "cpname_do_64_oilcisterns", "cpname_do_64_oldcity", "cpname_do_64_eastoilfield", "cpname_do_64_gasstation", "cpname_do_64_ustown" ] ,
"dragon_valley" :
[ "cpname_dv_64_refinery", "cpname_dv_64_powerstation", "cpname_dv_64_hillvillage", "cpname_dv_64_woodyard", "cpname_dv_64_islandfarmhouse", "cpname_dv_64_marketplace", "cpname_dv_64_temple", "cpname_dv_64_rivervillage", "cpname_dv_64_vistapoint", "cpname_dv_64_docks", "cpname_dv_64_uscarrier" ] ,
"fushe_pass" :
[ "cpname_gp_64_chineseairfield", "cpname_gp_64_canyonguardpost", "cpname_gp_64_uppercamp", "cpname_gp_64_bridgecamp", "cpname_gp_64_wmineentrance", "cpname_gp_64_securityhq", "cpname_gp_64_powerplant", "cpname_gp_64_emineentrance", "cpname_gp_64_mountainlookout", "cpname_gp_64_usairfield" ] ,
"gulf_of_oman" :
[ "cpname_go_64_airfieldbase", "cpname_go_64_village", "cpname_go_64_constructionsite", "cpname_go_64_hotel", "cpname_go_64_villagefort", "cpname_go_64_rockfort", "cpname_go_64_olivefort", "cpname_go_64_riverfort", "cpname_go_64_uscarrier" ] ,
"kubra_dam" :
[ "cpname_kd_64_intake", "cpname_kd_64_constructionsite", "cpname_kd_64_powerstation", "cpname_kd_64_lowerdam", "cpname_kd_32_refuellingstation", "cpname_kd_64_materialstation", "cpname_kd_64_supervisorbase", "cpname_kd_64_bridgebase", "cpname_kd_64_abandonedhuts" ] ,
"mashtuur_city" :
[ "cpname_mc_64_ngasstation", "cpname_mc_64_hotel", "cpname_mc_64_powerplant", "cpname_mc_64_mosque", "cpname_mc_64_backyard", "cpname_mc_64_hill", "cpname_mc_64_sgasstation" ] ,
"operation_clean_sweep" :
[ "cpname_oc_64_mecairfield", "cpname_oc_64_harbor", "cpname_oc_64_communicationcentral", "cpname_oc_64_abandonedvillage", "cpname_oc_64_smallairstrip", "cpname_oc_64_refuellingstation", "cpname_oc_64_controlcenter", "cpname_oc_64_airfield" ] ,
"sharqi_peninsula" :
[ "cpname_sp_64_beachhouse", "cpname_sp_64_clubhouse", "cpname_sp_64_outskirts", "cpname_sp_64_city_entrance", "cpname_sp_64_surveillancepost", "cpname_sp_64_alley", "cpname_sp_64_constructionsite", "cpname_sp_64_hotel", "cpname_sp_64_tvstation" ] ,
"songhua_stalemate" :
[ "cpname_ss_64_chinesehq", "cpname_ss_64_centralfront", "cpname_ss_64_southfront", "cpname_ss_64_southisland", "cpname_ss_64_northisland", "cpname_ss_64_westperimeter", "cpname_ss_64_fishfactory", "cpname_ss_64_northperimeter" ] ,
"strike_at_karkand" :
[ "cpname_sk_64_factory", "cpname_sk_64_warehouse", "cpname_sk_64_cementfactory", "cpname_sk_64_gatehouse", "cpname_sk_64_trainaccident", "cpname_sk_64_suburb", "cpname_sk_64_square", "cpname_sk_64_hotel", "cpname_sk_64_gasstation" ] ,
"zatar_wetlands" :
[ "cpname_zw_64_mecbase", "cpname_zw_64_farm", "cpname_zw_64_naturalgasstation", "cpname_zw_64_centralisland", "cpname_zw_64_factory", "cpname_zw_64_village", "cpname_zw_64_airfield", "cpname_zw_64_beach", "cpname_zw_64_uscarrier" ] } }


aasCps = False
for obj in bf2.objectManager.getObjectsOfType('dice.hfe.world.ObjectTemplate.ControlPoint'):
obj = obj.templateName
aasMapSize = obj[10:12]
break
aasMapsOfSize = aasMaps[aasMapSize]
aasCps = aasMapsOfSize[bf2.gameLogic.getMapName()]

aasTeam2 = 2
if aasCps:
if aasTeam == 2:
aasTeam2 = 1
aasCps.reverse()
for aasCnt in range(0,len(aasCps)):
aasNumOfCps = 0
aasTeamCps = 0
for obj in bf2.objectManager.getObjectsOfType('dice.hfe.world.ObjectTemplate.ControlPoint'):
aasNumOfCps += 1
if obj.cp_getParam('team') == aasTeam:
aasTeamCps += 1
if obj.templateName.lower() == aasCps[aasCnt]:
aasCpId = obj
elif obj.templateName.lower() == aasCps[aasCnt-1]:
aasPrevCpId = obj
if aasInit:
if aasTeamCps < int(aasNumOfCps / 2):
aasCpId.cp_setParam('flag', aasTeam)
aasCpId.cp_setParam('team', aasTeam)
aasCpId.cp_setParam('takeOverChangePerSecond', 100)
elif aasCpId.cp_getParam('team') != aasTeam:
if aasCnt == 0 or aasPrevCpId.cp_getParam('team') == aasTeam:
aasNextCp[aasTeam] = aasCps[aasCnt]
break

def aasCpName(aasCp):
aasCp = aasCp.lower()
aasCp = aasL10nCp[aasCp[13:]]
aasCp = aasCp[aasL10n]
return aasCp


def init():
# events hook
host.registerGameStatusHandler(onGameStatusChanged)
if host.sgl_getIsAIGame() == 1:
host.sh_setEnableCommander(aasCommander)
else:
host.sh_setEnableCommander(aasCommander)

host.registerHandler('TimeLimitReached', onTimeLimitReached, 1)

if g_debug: print "gpm_cq.py initialized"



def deinit():
bf2.triggerManager.destroyAllTriggers()
global g_controlPoints
g_controlPoints = []
host.unregisterGameStatusHandler(onGameStatusChanged)
if g_debug: print "gpm_cq.py uninitialized"



def onGameStatusChanged(status):

global g_controlPoints
if status == bf2.GameStatus.Playing:

if aasCpBalance:
aasSetNextCp(1, 1)
aasSetNextCp(2, 1)

# add control point triggers
g_controlPoints = bf2.objectManager.getObjectsOfType('dice.hfe.world.ObjectTemplate.ControlPoint')
for obj in g_controlPoints:
radius = float(obj.getTemplateProperty('radius'))
isHemi = int(obj.cp_getParam('isHemisphere'))

if aasRadius > 0:
aasRadiusFactor = float(host.ss_getParam('maxPlayers')) / aasRadius
if aasRadiusFactor > 1:
radius = round(radius * aasRadiusFactor)

if isHemi != 0:
id = bf2.triggerManager.createHemiSphericalTrigger(obj, onCPTrigger, '<<PCO>>', radius, (1, 2, 3))
else:
id = bf2.triggerManager.createRadiusTrigger(obj, onCPTrigger, '<<PCO>>', radius, (1, 2, 3))
obj.triggerId = id
obj.lastAttackingTeam = 0
if obj.cp_getParam('team') > 0:
obj.flagPosition = Top
else:
obj.flagPosition = Bottom

host.registerHandler('ControlPointChangedOwner', onCPStatusChange)

# setup ticket system
ticketsTeam1 = calcStartTickets(bf2.gameLogic.getDefaultTickets(1))
ticketsTeam2 = calcStartTickets(bf2.gameLogic.getDefaultTickets(2))

bf2.gameLogic.setTickets(1, ticketsTeam1)
bf2.gameLogic.setTickets(2, ticketsTeam2)

bf2.gameLogic.setTicketState(1, 0)
bf2.gameLogic.setTicketState(2, 0)

bf2.gameLogic.setTicketLimit(1, 1, 0)
bf2.gameLogic.setTicketLimit(2, 1, 0)
bf2.gameLogic.setTicketLimit(1, 2, 10)
bf2.gameLogic.setTicketLimit(2, 2, 10)
bf2.gameLogic.setTicketLimit(1, 3, int(ticketsTeam1*0.1))
bf2.gameLogic.setTicketLimit(2, 3, int(ticketsTeam2*0.1))
bf2.gameLogic.setTicketLimit(1, 4, int(ticketsTeam1*0.2))
bf2.gameLogic.setTicketLimit(2, 4, int(ticketsTeam1*0.2))

host.registerHandler('TicketLimitReached', onTicketLimitReached)
updateTicketLoss()

# player events
host.registerHandler('PlayerDeath', onPlayerDeathCQ)
host.registerHandler('PlayerKilled', onPlayerKilledCQ)
host.registerHandler('PlayerRevived', onPlayerRevived)
host.registerHandler('PlayerSpawn', onPlayerSpawn)
host.registerHandler('EnterVehicle', onEnterVehicle)
host.registerHandler('ExitVehicle', onExitVehicle)

if g_debug: print "Conquest gamemode initialized."
else:
bf2.triggerManager.destroyAllTriggers()
g_controlPoints = []



def calcStartTickets(mapDefaultTickets):
return int(mapDefaultTickets * (bf2.serverSettings.getTicketRatio() / 100.0))



def onTimeLimitReached(value):
team1tickets = bf2.gameLogic.getTickets(1)
team2tickets = bf2.gameLogic.getTickets(2)

winner = 0
victoryType = 0
if team1tickets > team2tickets:
winner = 1
victoryType = 3
elif team2tickets > team1tickets:
winner = 2
victoryType = 3


host.sgl_endGame(winner, victoryType)



# update ticket system
def updateTicketLoss():
areaValueTeam1 = 0
areaValueTeam2 = 0
totalAreaValue = 0
numCpsTeam0 = 0
numCpsTeam1 = 0
numCpsTeam2 = 0

# calculate control point area value for each team
for obj in g_controlPoints:
team = obj.cp_getParam('team')
if team == 1:
areaValueTeam1 += obj.cp_getParam('areaValue', team)
totalAreaValue += areaValueTeam1
numCpsTeam1 += 1
elif team == 2:
areaValueTeam2 += obj.cp_getParam('areaValue', team)
totalAreaValue += areaValueTeam2
numCpsTeam2 += 1
else:
numCpsTeam0 += 1
totalAreaValue += 0

# check if a team has no control points
if numCpsTeam1 == 0 or numCpsTeam2 == 0:
if numCpsTeam1 == 0:
losingTeam = 1
winningTeam = 2
else:
losingTeam = 2
winningTeam = 1

# check if there is anyone alive
foundLivingPlayer = False
for p in bf2.playerManager.getPlayers():
if p.getTeam() == losingTeam and p.isAlive():
foundLivingPlayer = True
break

if not foundLivingPlayer:

# drop tickets
ticketLossPerSecond = bf2.gameLogic.getDefaultTicketLossAtEndPerMin()
bf2.gameLogic.setTicketChangePerSecond(losingTeam, -ticketLossPerSecond)
bf2.gameLogic.setTicketChangePerSecond(winningTeam, 0)

return


# update ticket loss
team1AreaOverweight = areaValueTeam1 - areaValueTeam2
percentualOverweight = 1.0
if totalAreaValue != 0:
percentualOverweight = abs(team1AreaOverweight / totalAreaValue)

ticketLossPerSecTeam1 = calcTicketLossForTeam(1, areaValueTeam2, -team1AreaOverweight)
ticketLossPerSecTeam2 = calcTicketLossForTeam(2, areaValueTeam1, team1AreaOverweight)
bf2.gameLogic.setTicketChangePerSecond(1, -ticketLossPerSecTeam1)
bf2.gameLogic.setTicketChangePerSecond(2, -ticketLossPerSecTeam2)



# actual ticket loss calculation function
def calcTicketLossForTeam(team, otherTeamAreaValue, otherTeamAreaOverweight):
if otherTeamAreaValue >= 100 and otherTeamAreaOverweight > 0:
ticketLossPerSecond = (bf2.gameLogic.getDefaultTicketLossPerMin(team) / 60.0) * (otherTeamAreaOverweight / 100.0)
return ticketLossPerSecond
else:
return 0



DOWNWARDS = -1
UPWARDS = 1

# called when tickets reach a predetermined limit (negativ value means that the tickets have become less than the limit)
def onTicketLimitReached(team, limitId):
if (limitId == -1):
if (team == 1):
winner = 2

elif (team == 2):
winner = 1

bf2.gameLogic.setTicketState(1, 0)
bf2.gameLogic.setTicketState(2, 0)

host.sgl_endGame(winner, 3)

# update ticket state
else:
updateTicketWarning(team, limitId)



# called when the ticket state should be updated (for triggering messages and sounds based on tickets left)
def updateTicketWarning(team, limitId):

oldTicketState = bf2.gameLogic.getTicketState(team)
newTicketState = 0

if (oldTicketState >= 10):
newTicketState = 10

if (limitId == -2):
newTicketState = 10

elif (limitId == 2):
newTicketState = 0

elif (limitId == -3):
newTicketState += 2

elif (limitId == -4):
newTicketState += 1

if (oldTicketState != newTicketState):
bf2.gameLogic.setTicketState(team, newTicketState)



# called when someone enters or exits cp radius
def onCPTrigger(triggerId, cp, vehicle, enter, userData):
if not cp.isValid(): return

if vehicle and vehicle.getParent(): return

# can this cp be captured at all?
if cp.cp_getParam('unableToChangeTeam') != 0:
return

playersInVehicle = None
if vehicle:
playersInVehicle = vehicle.getOccupyingPlayers()

if enter:
for p in playersInVehicle:
cp = getOccupyingCP(p)
if cp != None:
if not p.getIsInsideCP():
if g_debug: print "Resetting enterPctAt for player ", p.getName()
p.enterCpAt = host.timer_getWallTime()

if vehicle:
for p in playersInVehicle:
# only count first player in a vehicle
if p == playersInVehicle[0]:
print p.index, " is in radius. v=", vehicle.templateName
p.setIsInsideCP(enter)
else:
p.setIsInsideCP(0)
if enter == 1:
bf2.gameLogic.sendHudEvent(p, 66, 49) #66 = HEEnableHelpMessage, 49 = VHMExitToCaptureFlag;

# count people in radius
team1Occupants = 0
team2Occupants = 0

pcos = bf2.triggerManager.getObjects(cp.triggerId)
for o in pcos:
if not o: continue # you can get None in the result tuple when the host can't figure out what object left the trigger
if o.getParent(): continue # getOccupyingPlayers returns all players downwards in the hierarchy, so dont count them twice
occupyingPlayers = o.getOccupyingPlayers()
for p in occupyingPlayers:

# only count first player in a vehicle
if p != occupyingPlayers[0]:
continue

if p.isAlive() and not p.isManDown():

if not p.killed:
if p.getTeam() == 1:
team1Occupants += 1
elif p.getTeam() == 2:
team2Occupants += 1


# determine who is taking control
team1OverWeight = team1Occupants - team2Occupants
attackOverWeight = 0

if team1OverWeight > 0:
attackingTeam = 1
elif team1OverWeight < 0:
attackingTeam = 2
else:
attackingTeam = 0


if team1Occupants == 0 and team2Occupants == 0:

# nobody here, slowly go back to owning team
if cp.cp_getParam('team') == 0:
attackOverWeight = -0.5
else:
attackOverWeight = 0.5

timeToChangeControl = cp.cp_getParam('timeToLoseControl')

else:

aasTeam = attackingTeam

aasSetNextCp(aasTeam, 0)

if cp.cp_getParam('team') != aasTeam:
if aasNextCp[aasTeam] != cp.templateName.lower():
aasMsg = 'game.sayTeam ' + str(aasTeam) + ' "' + aasTip + aasCpName(aasNextCp[aasTeam]) + aasL10nText[2] + aasCpName(cp.templateName) + aasTip + '"'
if aasMsg != aasLast[aasTeam]:
aasLast[aasTeam] = aasMsg
host.rcon_invoke(aasMsg)
return

# raise flag if already ours, or at bottom and neutral. Otherwise lower first.
if cp.cp_getParam('flag') == attackingTeam or (cp.flagPosition == Bottom and cp.cp_getParam('team') == 0):

# our flag, raise
attackOverWeight = abs(team1OverWeight)
timeToChangeControl = cp.cp_getParam('timeToGetControl')
else:

# other team raised flag, lower first
attackOverWeight = - abs(team1OverWeight)
timeToChangeControl = cp.cp_getParam('timeToLoseControl')


if cp.cp_getParam('onlyTakeableByTeam') != 0 and cp.cp_getParam('onlyTakeableByTeam') != attackingTeam:
return


# flag can only be changed when at bottom
if cp.flagPosition == Bottom:
cp.cp_setParam('flag', attackingTeam)


# calculate flag raising/lowering speed
if timeToChangeControl > 0:
takeOverChangePerSecond = 1.0 * attackOverWeight / timeToChangeControl
else:
takeOverChangePerSecond = 0.0

if (cp.flagPosition == Top and takeOverChangePerSecond > 0) or (cp.flagPosition == Bottom and takeOverChangePerSecond < 0):
takeOverChangePerSecond = 0.0

if abs(takeOverChangePerSecond) > 0:
cp.flagPosition = Middle

cp.cp_setParam('takeOverChangePerSecond', takeOverChangePerSecond)



# called when a control point flag reached top or bottom
def onCPStatusChange(cp, top):

playerId = -1
takeoverType = -1
newTeam = -1
scoringTeam = -1

if top: cp.flagPosition = Top
else: cp.flagPosition = Bottom

# determine capture / neutralize / defend
if cp.cp_getParam('team') != 0:

if top:
# regained flag, do nothing
pass

else:
# neutralize
newTeam = 0
if cp.cp_getParam('team') == 1:
scoringTeam = 2
else:
scoringTeam = 1

takeoverType = TAKEOVERTYPE_NEUTRALIZE

else:

if top:
# capture
newTeam = cp.cp_getParam('flag')
scoringTeam = newTeam
takeoverType = TAKEOVERTYPE_CAPTURE

else:
# hit bottom, but still neutral
pass


# scoring
if takeoverType > 0:
pcos = bf2.triggerManager.getObjects(cp.triggerId)

# count number of players
scoringPlayers = []
firstPlayers = []
for o in pcos:
if o.getParent(): continue

occupyingPlayers = o.getOccupyingPlayers()
for p in occupyingPlayers:

# only count first player in a vehicle
if p != occupyingPlayers[0]:
continue

if p.isAlive() and not p.isManDown() and p.getTeam() == scoringTeam:
if len(firstPlayers) == 0 or p.enterCpAt < firstPlayers[0].enterCpAt:
firstPlayers = [p]
elif p.enterCpAt == firstPlayers[0].enterCpAt:
firstPlayers += [p]

if not p in scoringPlayers:
scoringPlayers += [p]

# deal score
for p in scoringPlayers:
oldScore = p.score.score;
if takeoverType == TAKEOVERTYPE_CAPTURE:
if p in firstPlayers:
p.score.cpCaptures += 1
addScore(p, SCORE_CAPTURE, RPL)
bf2.gameLogic.sendGameEvent(p, 12, 0) #12 = Conquest, 0 = Capture
playerId = p.index
else:
p.score.cpAssists += 1
addScore(p, SCORE_CAPTUREASSIST, RPL)
bf2.gameLogic.sendGameEvent(p, 12, 2) #12 = Conquest, 2 = Assist


elif takeoverType == TAKEOVERTYPE_NEUTRALIZE:
if p in firstPlayers:
p.score.cpNeutralizes += 1
addScore(p, SCORE_NEUTRALIZE, RPL)
bf2.gameLogic.sendGameEvent(p, 12, 3) #12 = Conquest, 3 = Neutralize
else:
p.score.cpNeutralizeAssists += 1
addScore(p, SCORE_NEUTRALIZEASSIST, RPL)
bf2.gameLogic.sendGameEvent(p, 12, 4) #12 = Conquest, 4 = Neutralize assist



# immediate ticket loss for opposite team
enemyTicketLossInstant = cp.cp_getParam('enemyTicketLossWhenCaptured')
if enemyTicketLossInstant > 0 and newTeam > 0:

if newTeam == 1:
punishedTeam = 2
elif newTeam == 2:
punishedTeam = 1

tickets = bf2.gameLogic.getTickets(punishedTeam)
tickets -= enemyTicketLossInstant
bf2.gameLogic.setTickets(punishedTeam, tickets)


# update control point
cp.cp_setParam('playerId', playerId) #always set player first
if newTeam != -1 and cp.cp_getParam('team') != newTeam:
cp.cp_setParam('team', newTeam)
onCPTrigger(cp.triggerId, cp, 0, 0, 0)
updateTicketLoss()

for aasTeam in [ 1, 2 ]:
aasSetNextCp(aasTeam, 0)
aasMsg = 'game.sayTeam ' + str(aasTeam) + ' "' + aasTip + aasL10nText[3] + aasCpName(aasNextCp[aasTeam]) + aasTip + '"'
if aasMsg != aasLast[aasTeam]:
aasLast[aasTeam] = aasMsg
host.rcon_invoke(aasMsg)


def onPlayerDeathCQ(victim, vehicle):

# punish team with one ticket
if victim != None:
team = victim.getTeam()
teamTickets = bf2.gameLogic.getTickets(team)
teamTickets -= 1
bf2.gameLogic.setTickets(team, teamTickets)

# check if it was the last player
foundLivingPlayer = False
for p in bf2.playerManager.getPlayers():
if p != victim and p.getTeam() == victim.getTeam() and p.isAlive():
foundLivingPlayer = True

if not foundLivingPlayer:
updateTicketLoss()



def onPlayerKilledCQ(victim, attacker, weapon, assists, object):
if not victim:
return

victim.killed = True

# update flag takeover status if victim was in a CP radius
cp = getOccupyingCP(victim)
if cp != None:
onCPTrigger(-1, cp, victim.getVehicle(), False, None)

# give defend score if killing enemy within cp radius
if attacker != None and attacker.getTeam() != victim.getTeam()\
and cp.cp_getParam('unableToChangeTeam') == 0 and cp.cp_getParam('onlyTakeableByTeam') == 0:

if cp != None and cp.cp_getParam('team') == attacker.getTeam():
attacker.score.cpDefends += 1
addScore(attacker, SCORE_DEFEND, RPL)
bf2.gameLogic.sendGameEvent(attacker, 12, 1) #12 = Conquest, 1 = Defend



def onPlayerRevived(victim, attacker):

# update flag takeover status if victim was in a CP radius
victim.killed = False

cp = getOccupyingCP(victim)
if cp != None:
onCPTrigger(-1, cp, victim.getVehicle(), True, None)



def onPlayerSpawn(player, soldier):
player.killed = False

aasTeam = player.getTeam()

aasMsg = 'game.sayTeam ' + str(aasTeam) + ' "' + aasTip + aasL10nText[0] + aasTip + '"'
if aasMsg != aasLast[aasTeam]:
aasLast[aasTeam] = aasMsg
host.rcon_invoke(aasMsg)

aasSetNextCp(aasTeam, 0)

aasMsg = 'game.sayTeam ' + str(aasTeam) + ' "' + aasTip + aasL10nText[3] + aasCpName(aasNextCp[aasTeam]) + aasTip + '"'
if aasMsg != aasLast[aasTeam]:
aasLast[aasTeam] = aasMsg
host.rcon_invoke(aasMsg)


def onEnterVehicle(player, vehicle, freeSoldier = False):
updateCaptureStatus(vehicle)


def onExitVehicle(player, vehicle):

# update flag takeover status if player in a CP radius

print "Player exiting ", player.getName()
cp = getOccupyingCP(player)

# can this cp be captured at all?
player.setIsInsideCP(cp != None and cp.cp_getParam('unableToChangeTeam') == 0)

updateCaptureStatus(vehicle)


#Update cp capture status on players in vehicle
def updateCaptureStatus(vehicle):

rootVehicle = bf2.objectManager.getRootParent(vehicle)
playersInVehicle = rootVehicle.getOccupyingPlayers()

# set the player in the topmost pco as inside - others outside
for p in playersInVehicle:
print "Players in vehicle ", p.getName()
cp = getOccupyingCP(p)
p.setIsInsideCP(cp != None and cp.cp_getParam('unableToChangeTeam') == 0 and p == playersInVehicle[0])


# find cp that player is occupying, if any
def getOccupyingCP(player):
vehicle = player.getVehicle()
playerPos = vehicle.getPosition()

# find closest CP
closestCP = None
if len(g_controlPoints) == 0: return None
for obj in g_controlPoints:
distanceTo = getVectorDistance(playerPos, obj.getPosition())
if closestCP == None or distanceTo < closestCPdist:
closestCP = obj
closestCPdist = distanceTo

# is the player in radius?
pcos = bf2.triggerManager.getObjects(closestCP.triggerId)
for o in pcos:
if o == player.getDefaultVehicle():
# Player is DEFAULT vehicle - this is needed when called from onEnterVehicle
return closestCP
else:
for p in o.getOccupyingPlayers():
if p == player:
return closestCP

return None



# get distance between two positions
def getVectorDistance(pos1, pos2):
diffVec = [0.0, 0.0, 0.0]
diffVec[0] = math.fabs(pos1[0] - pos2[0])
diffVec[1] = math.fabs(pos1[1] - pos2[1])
diffVec[2] = math.fabs(pos1[2] - pos2[2])

return math.sqrt(diffVec[0] * diffVec[0] + diffVec[1] * diffVec[1] + diffVec[2] * diffVec[2])
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 26.7.2007, 17:43
Сообщение #8





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



TERROR_rus, твой "файл" работать не будет - потеряна табуляция.

ROOL, TERROR_rus, если еще актуально, то здесь моя обновленная версия. Поддерживается Road to Jalalabad и Wake Island 2007.

To ALL.
Вкратце, что нужно, чтобы добавить свои новые карты:
1. Вписать названия карт и точек в массив aasMaps, причем названия точек (брать из server.zip/GameModes/gpm_cq/XX/GamePlayObjects.con - внизу, перед CombatAreaManager) должны быть в определенном порядке: от неамериканцев до американцев в порядке их захватывания.
2. В строке 358 (я беру свой файл) скрипт определяет размер карты (16/32/64) путем просмотра значения позиции 10:12. Для новых карт пришлось добавить 2 проверки (строки 359 и 361). Если в вашей карте названия точек не содержать размера карты, то включить AAS режим можно одним способом: вручную отредактировать все файлы внутри server.zip.
3. В строке 395 задается значения "красивого" названия точек (массив aasL10nCp), поэтому в этот массив (aasL10nCp) в качестве первого параметра надо добавить название точки с 14 символа. Именно поэтому вы можете увидеть точки "el_0". smile.gif

Вроде все...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 27.7.2007, 16:08
Сообщение #9





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



REW.BMW
твой файл тоже не работает; после выбора точки респауна ничего не происходит, респауна нет, билетов у обеих команд - 0.
Проверял на Dalian_plant gpm_cq 64 и на Dalian_plant gpm_cq 32.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 28.7.2007, 10:28
Сообщение #10





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



REW.BMW, вот красавчег :+: :+: :+: ,всё отлично завелось и Вейк и ДжаЛ(Далай Плант тоже работает smile.gif )Огромное тебе спасибо комрад... ;) Жаль постов не хватает,чтоб дать тебе + в репу :( ,выручил ты нас :D
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 28.7.2007, 10:49
Сообщение #11





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Нашёл такой же скрипт для "Special Forces", всё замечательно работает совместно с "modmanager"ом.
Подскажите, плз, возможную причину, почему у меня с вашим скриптом BF2 не стартует (проверял на стандартных картах)?
о сервере:
OS WinXP
BF2 v1.41 + AF + EF
bf2statistics
"modmanager" ("mm_tk_punish", "mm_mapautosizer", "mm_kicker" , "mm_antibaserape", "mm_announcer", "mm_bf2cc", "mm_autobalance")


Сообщение отредактировал niknk - 28.7.2007, 11:01
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 28.7.2007, 15:01
Сообщение #12





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Вопрос снят, разобрался
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 28.7.2007, 16:57
Сообщение #13





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Цитата(niknk @ Суббота, 28 Июля 2007, 10:49:18) *
Нашёл такой же скрипт для "Special Forces", всё замечательно работает совместно с "modmanager"ом.


скрипт выложи пожалуйста..
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 30.7.2007, 4:47
Сообщение #14





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Цитата(TDA @ Суббота, 28 Июля 2007, 20:57:45) *
скрипт выложи пожалуйста..


AAS для Special Forces

Сообщение отредактировал niknk - 30.7.2007, 4:55
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 31.7.2007, 1:49
Сообщение #15





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



кстати! с этим модом ни у кого проблем с администрировнием не возникает???
если нет подскажите как сделать автобаланс и смену сторон после раунда
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 31.7.2007, 6:15
Сообщение #16





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Цитата(mazut @ Вторник, 31 Июля 2007, 05:49:53) *
кстати! с этим модом ни у кого проблем с администрировнием не возникает???
если нет подскажите как сделать автобаланс и смену сторон после раунда

AAS на администрирование, автобаланс и смену сторон ни как не влияет.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 31.7.2007, 6:47
Сообщение #17





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



REW.BMW
По работе скрипта.
У меня он ни в какую не хотел работать, до тех пор, пока (каково было моё удивление после нескольких часов поиска причины eek.gif ) не прописал в маплисте все карты только в нижнем ригистре ( eek.gif скрипт чувствителен к ригистру eek.gif ).

По добавлению новых карт.
Попробывал добавить карту Strait_of_Hormuz, изменил в server.zip названия точек (в них не было размера), добавил всё что нужно в массивы aasL10nCp и aasMaps - результат отрицательный (делал всё по твоей инструкции). Во-первых игра не стартует, во-вторых, в игре при просмотре карты названия точек остались преждние, хотя в массиве aasL10nCp я им прописал "красивые" названия.
В чём может быть проблема?

Сообщение отредактировал niknk - 31.7.2007, 6:50
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 1.8.2007, 17:43
Сообщение #18





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:




у меня такая ошибка вылезает, делал всё по инструкции,
карта highway tampa
названия там содержат размер карты на техже местах что и стандартные, подскажите что делать плиз!!!
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 2.8.2007, 4:27
Сообщение #19





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



"failed to initialize gamemode"
ты во время добавления новой карты нарушил код скрипта, у тебя серв его (скрипт) не воспринимает, а где ты его нарушил, это только тебе может быть известно.

У кого-нить есть положительный опыт добавления новых карт (с редактированием server.zip самой карты)? Отпишитесь плз.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 2.8.2007, 9:43
Сообщение #20





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Цитата(niknk @ Четверг, 2 Августа 2007, 04:27:43) *
"failed to initialize gamemode"
ты во время добавления новой карты нарушил код скрипта, у тебя серв его (скрипт) не воспринимает, а где ты его нарушил, это только тебе может быть известно.

У кого-нить есть положительный опыт добавления новых карт (с редактированием server.zip самой карты)? Отпишитесь плз.

это разобрался, надо ведь в алфавитном порядке карты ставить, другая проблема, теперь в том чтобы точки както распределить между командами, ато получаеццо что заходиш а половина точек ужа захвачена, причём както даже не по порядку :(
осюда вопрос, как обозначать принадлежность точки к команде в начале раунда???
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

5 страниц V   1 2 3 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 16.4.2024, 23:15
Консультации адвоката по уголовным делам. Бесплатно. По всей России